14.2 負荷分散
素朴な並列化ではほとんど速度が向上しない
負荷の調整が必要
負荷の調整のトレードオフ
静的な負荷分散
前もって仕事を分散させる
タスクの完了のコンセンサス以外の調整が不要
実際の仕事量は均等にならない
仕事以外の資源も均等に
プロセッサごとのto空間の余裕の話
動的な負荷分散
実際に仕事をほぼ均等に分散
仕事量が事前に見積もれるタスクの場合
分割がシンプル
量の再調整が不要
事前見積もりできない場合
過分割 (over-partition)
仕事をスレッドやプロセッサの数よりも多くの数に分割
利用可能なプロセッサ数が変化しても仕事量の均衡を回復できる
コレクタの抽象化
code: collector.py
def collectorThreadMainLoop():
while not terminated():
acquireWork() # 獲得: 仕事を獲得しようとする
performWork() # 実行: 獲得した仕事を実行する
generateWork() # 生成: 実行の際に新しく発見された仕事をプールに追加する